//
//  AISBLEDevice.h
//  ParkingCloud
//
//  Created by Ares on 16/5/9.
//  Copyright © 2016年 NJSubier. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>

@interface AISBLEDevice : NSObject

/*! 返回关心的设备特有的UUID数组 */
+ (nullable CBUUID *)serviceUUID;

@property (nonatomic, strong, nullable) NSString *deviceName;
@property (nonatomic, strong, nullable) NSNumber *RSSI;
@property (nonatomic, strong, nullable) CBPeripheral *peripheral;

/*! 连接设备状态发生变化时有DeviceManager调用 
 * 此函数子类需要时重载，进行断开时的操作
 */
- (void)deviceConnectedFailedWithError:(nullable NSError *)error;
- (void)deviceDisconnectedWithError:(nullable NSError *)error;

/*! 返回需要使用的Service UUID列表 
 * 此函数子类重载，否则使用nil，将获取所有service
 * DeviceManager调用
 */
- (nullable NSArray<CBUUID *> *)interestedServiceUUIDs;

/*! 返回某Service中需要使用的Characteristic UUID列表
 * 此函数需要子类重载，否则使用nil，将获取所有的Characteristic
 * DeviceManager调用
 */
- (nullable NSArray<CBUUID *> *)characteristicUUIDsForService:(nonnull CBService *)service;

/*! 当发现Characteristic时调用 
 * 此函数需要子类重载，用来实现获得Characteristic时存储它。
 * DeviceManager调用
 */
- (void)setupDeviceWithDiscoveredCharacteristics:(nullable NSArray<CBCharacteristic *> *)characteristics;

/*! 当属性数据更新时，会调用此函数 
 * 此函数子类需要时重载，用来进行获得更新通知后的操作
 */
- (void)valueUpdatedForCharacteristic:(nullable CBCharacteristic *)characteristic;

/*! 当写属性完成时，会调用此函数
 * 此函数子类需要时重载，用来进行写属性完毕后的操作
 */
- (void)valueWrittenForCharacteristic:(nullable CBCharacteristic *)characteristic;

/*! 当有通知到达时，会调用此函数
 * 此函数子类需要时重载，用来进行通知时的操作
 */
- (void)notificationStateUpdatedForCharacteristic:(nullable CBCharacteristic *)characteristic;

@end
